package com.it.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


// TODO SpringMVC (1)、页面跳转控制
/**
 * 【说明】：在web开发中、主要有俩种开发模式：混合式开发，前后端分离
 *         在了解混合式开发，首先先要了解一下JSP技术、JSP是一种动态网页开发技术，
 *         JSP就是生成动态页面、将Java代码嵌入到HTML页面中，以便进行动态生成内容
 * 【配置】：在Java配置类中配置JSP视图解析器，详情请看 config/springmvcConfig配置类文件
 */
@Controller
@RequestMapping("/jsp")
public class springmvc01 {

    // TODO 测试返回index模版视图页面
    /**
     * 【注意】：1、方法返回值类型是字符串类型
     *         2、不能添加@ResponseBody，直接返回页面字符串名称给浏览器，不找视图，不走视图解析器
     *         3、返回值 对应中间的视图（页面名称）
     */
    @GetMapping("/index")
    public String index(HttpServletRequest request) {
        System.out.println(request.getAttribute("title"));
        request.setAttribute("title","Spring MVC 响应数据");
        // 底层就是字符串路径拼接
        return "/index";
    }

    // TODO 请求转发
    /**
     * 【说明】：请求转发是服务器内部资源跳转方法、只能跳转项目内的地址
     * 【注意】：1、方法的返回值写成字符串
     *         2、不能添加@ResponseBody
     *         3、返回字符串前 添加 "forward:/转发地址";
     */
    @GetMapping("/data1")
    public String forward(HttpServletRequest request) {
        System.out.println(request.getAttribute("title"));
        request.setAttribute("title","Spring MVC 请求转发");
        return "forward:/jsp/index";
    }

    // TODO 请求重定向
    /**
     * 【说明】：请求重定向是服务器外部跳转行为、可以跳转项目内的地址，也可以访问外部地址、例如：百度
     * 【注意】：1、方法的返回值写成字符串
     *         2、不能添加@ResponseBody
     *         3、返回字符串前 添加 "forward:/转发地址";
     */@GetMapping("/data2")
    public String redirect(HttpServletRequest request) throws InterruptedException {
        System.out.println(request.getAttribute("title"));
        request.setAttribute("title","Spring MVC 请求重定向");

        Thread.sleep(3000);
        return "redirect:/jsp/index";
    }
}
